package com.haiya.user.controller;

import java.util.List;
import java.util.Map;

import com.haiya.common.request.Query;
import com.haiya.common.response.CommonRes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.haiya.common.model.PageResult;
import com.haiya.common.model.Result;
import com.haiya.common.model.SysRole;
import com.haiya.user.service.ISysRoleService;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
 * @author qiaoguoqiang
 * 角色管理
 */
@Slf4j
@RestController
@Api(tags = "角色模块api")
public class SysRoleController {
    @Autowired
    private ISysRoleService sysRoleService;

    /**
     * 角色分页列表
     * 分页查询两种方式:
     * 1. 使用queryList() + queryTotal()结合， 需要写两个mapper的sql查询， 不推荐使用，需要多些重复代码。
     * 2. 使用mybatis-plus: 传入Page<> page到Mapper, 它自动帮我们分页，并且将查询的总记录数写到page中。
     *
     * 我们分页查询使用PageRes作为CommonRes的数据填充域。
     * @param params
     * @return
     */
    @ApiOperation(value = "后台管理查询角色")
    @GetMapping("/roles")
    public CommonRes findRoles(@RequestParam Map<String, Object> params) {
        Query query = new Query(params);
        return CommonRes.ok(sysRoleService.findRoles(query));
    }

    /**
     * 用户管理查询所有角色
     * @return
     */
    @ApiOperation(value = "后台管理查询角色")
    @GetMapping("/allRoles")
    public CommonRes findAll() {
        List<SysRole> result = sysRoleService.findAll();
        return CommonRes.ok(result);
    }

    /**
     * 角色新增或者更新
     * POST
     * {
     *     "code": "haha",
     *     "name": "乐哈哈"
     * }
     * 含 id 参数为修改, 不含为新增
     *
     * tenant_id自动登录当前登录用户注入进来
     *
     * @param sysRole
     * @return
     */
    @PostMapping("/roles/saveOrUpdate")
    public CommonRes saveOrUpdate(@RequestBody SysRole sysRole) throws Exception {
        sysRoleService.saveOrUpdateRole(sysRole);
        return CommonRes.ok();
    }

    /**
     * 后台管理删除角色
     * delete /role/1
     *
     * @param id
     */
    @ApiOperation(value = "后台管理删除角色")
    @DeleteMapping("/roles/{id}")
    public CommonRes deleteRole(@PathVariable Long id) {
        if (id == 1L) {
            return CommonRes.error("管理员不可以删除");
        }
        int i = sysRoleService.deleteRole(id);
        if (i > 0) {
            return CommonRes.ok();
        }
        return CommonRes.error();
    }
}
